package com.yujiahao.bigdata.acc

import org.apache.spark.broadcast.Broadcast
import org.apache.spark.{SparkConf, SparkContext}

import scala.collection.mutable

object Spark01_BC {
  def main(args: Array[String]): Unit = {
    //TODO 1、获得Spark环境的连接
    // 参数解读：setAppName("当前执行程序的名字").setMaster("当前的环境")
    // 分布式环境的基本架构为 主 - 从
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)
    //TODO 3、业务逻辑--广播变量
    val rdd1 = sc.makeRDD(List(
      ("a", 1), ("b", 2), ("c", 3)
    ))
    // 这里的Map是在Driver端创建的，但是需要在Executor端使用，并且Map传递是以Task为单位
    val map = mutable.Map(
      ("a", 4), ("b", 5), ("c", 6)
    )

    //TODO 广播变量
    sc.broadcast(map)

    rdd1.map{
      case (word,cnt)=>{

        val cnt1: Int = map.getOrElse(word, 0)
        (word,(cnt,cnt1))
      }
    }.collect().foreach(println)



    //TODO 2、关闭资源
    sc.stop()

  }
}